package edu.java基础;

public class Q_进制 {
    //win+r salc  进入计算机 左上角，程序员，DEC十进制，OCT八进制,BIN二进制，HEX十六进制

    //二进制：逢二进一，借一当二  0 1
    //二进制数值前以0b开头，b大小写都可以

    //八进制 0 1 2 3 4 5 6 7
    //数值前以0开头

    //十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f
    //数值前以0x开头，x大小写都可以

    /*二进制转十进制
    0b100:  系数：1  0  0   去掉二进制标识0b剩下的
            基数：二进制就是2
            权：  2  1  0   从右到左，以0为编号，逐个加一：012345678...
        公式：系数*技术的全次幂再相加
        0*2^0=0
        0*2^1=0
        1*2^2=4
        结果0+0+4=4

    */

    /*十六进制转十进制   任意进制转十进制
    系数*技术的全次幂再相加
    */

    /*
    十进制转二进制，十进制转任意进制
    公式：除基取余，不断除以基数，直到商为0，再把余数倒着取
    */

    //补码：运算数据
    //原码：看数据
    //反码: 转数据
    /*
    一个字节等于8个比特位，也就是8个二进制位
    原码：0代表正，1代表负  0（符号位）0000111：正7     1（符号位）0000111：负7
    反码：正数的反码与其原码相同，负数的反码是对其原码逐位取反，符号位除外
    补码：正数的补码与其原码相同，负数的补码是在其反码的末位加一
    正数的元反补相同
            -7：
    原码：1（符号位）0000111
    反码：1（符号位）1111000
    补码：1（符号位）1111001
    补码转原码：末尾-1，除符号位其他反转
    */

    //位运算符：是二进制位的运算，1表示true,0表示false
    /*
    &位与：遇false则false，遇0则0
            00000110
            00000010
       结果  00000010
    |位或：遇true则true，遇1则1
    ^位异或：相同为false，不同为true，异或两次，该数本身不变 10^5^5=10  10^5^10=5
    ~取反：全部取反，0变1,1变0,符号位也要取反
    */

    /*
    位移运算符
    <<:有符号左移运算，二进制位向左移动,左边符号位丢弃，右边补齐0
        规律：向左移动几位，就是乘以2的几次方  12<<2  12*2^2

    >>:有符号右移运算，二进制位向右移动，使用符号位进行补位
    规律；向右移动几位，就是除以2的几次幂

    >>>:无符号右移运算：无论符号是0还是1，都补0
    */

   /* public static void main(String[] args) {
        System.out.println(6&2);
        System.out.println(~6);
        //位移运算,运算效率高
        System.out.println(12<<1);  //12*2^1=24
        System.out.println(12<<2);  //12*2^2=48
    }*/

    //数据交换
   /* public static void main(String[] args) {
        int a=20,b=10;
        *//*int temp=a;  //引入第三方记录a的值
        a=b;
        b=temp;*//*

        //不使用第三方变量,使用异或
        a = a ^ b;  //a = 10 ^ 20
        b = a ^ b;  //b = 10 ^ 20 ^ 20 = 10
        a = a ^ b;  //a = 10 ^ 20 ^ 10
        System.out.println("a:"+a);
        System.out.println("b:"+b);
    }
    */

    //反转
    public static void main(String[] args) {
        int[] arr={19,28,37,46,50};
        /*
         int start = 0, end = arr.length-1;
         for( ; start < end; start++, end--){
            int temp = arr[start];
            arr[start]=arr[end];
            arr[end]=temp;
         }
        */
        //交换条件：start < end
        for (int start = 0, end = arr.length-1; start < end; start++, end--) {
            int temp = arr[start];
            arr[start]=arr[end];
            arr[end]=temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+", ");
        }
    }

}
